package com.sky.controller;

import com.sky.service.PmsAttrService;
import com.sky.utils.PageUtils;
import com.sky.utils.R;
import com.sky.vo.param.PmsAttrVO;
import com.sky.vo.request.PmsAttrRequestVO;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

/**
 * 商品属性控制器，负责处理与商品属性相关的HTTP请求。
 */
@RestController
@RequestMapping("/pmsAttr")
public class PmsAttrController {

    /**
     * 注入商品属性服务，用于处理业务逻辑。
     */
    @Resource
    private PmsAttrService pmsAttrService;

    /**
     * 分页查询商品属性。
     *
     * @param vo 查询条件和分页信息的VO对象。
     * @return 包含查询结果和分页信息的响应对象。
     */
    @GetMapping("/page")
    public R page(PmsAttrVO vo){
        PageUtils page = pmsAttrService.queryPage(vo);
        return R.ok(page);
    }

    /**
     * 根据属性ID获取属性信息。
     *
     * @param attrId 属性ID。
     * @return 包含属性信息的响应对象。
     */
    @GetMapping("/getById/{attrId}")
    public R getById(@PathVariable("attrId") Long attrId){
        PmsAttrRequestVO pmsAttr = pmsAttrService.getPmsAttr(attrId);
        return R.ok(pmsAttr);
    }

    /**
     * 添加商品属性。
     *
     * @param pmsAttrVO 新增属性的信息VO。
     * @return 添加结果的响应对象。
     */
    @PostMapping("/add")
    public R add(@RequestBody PmsAttrVO pmsAttrVO){
        boolean save = pmsAttrService.savePmsAttr(pmsAttrVO);
        return save ? R.ok() : R.error();
    }

    /**
     * 更新商品属性。
     *
     * @param pmsAttrVO 需要更新的属性信息VO。
     * @return 更新结果的响应对象。
     */
    @PostMapping("/update")
    public R update(@RequestBody PmsAttrVO pmsAttrVO){
        boolean update = pmsAttrService.updatePmsAttr(pmsAttrVO);
        return update ? R.ok() : R.error();
    }

    /**
     * 批量删除商品属性。
     *
     * @param attrIds 需要删除的属性ID数组。
     * @return 删除结果的响应对象。
     */
    @DeleteMapping("/delete")
    public R delete(@RequestBody Long[] attrIds){
        boolean delete = pmsAttrService.removeByIds(Arrays.asList(attrIds));
        return delete ? R.ok() : R.error();
    }

    /**
     * 查询属性与属性组的关系。
     *
     * @param attrGroupId 属性组ID。
     * @return 包含属性与属性组关系列表的响应对象。
     */
    @GetMapping("/attrGroupRelation")
    public R attrGroupRelation(@RequestParam("attrGroupId") Long attrGroupId){
        List<PmsAttrRequestVO> voList = pmsAttrService.attrGroupRelation(attrGroupId);
        return R.ok(voList);
    }

    /**
     * 分页查询没有属性组关系的属性。
     *
     * @param vo 查询条件和分页信息的VO对象。
     * @return 包含查询结果和分页信息的响应对象。
     */
    @GetMapping("/pageNoGroupRelation")
    public R pageNoGroupRelation(PmsAttrVO vo){
        PageUtils page = pmsAttrService.pageNoGroupRelation(vo);
        return R.ok(page);
    }
}
